package ru.chaykin.quadtree;

import ru.chaykin.primitives.Circle;
import ru.chaykin.primitives.Point;

/**
 * Квадрат подпространства для QuadTree
 * @author k.chaykin
 */
public class Quad {
	private float left;
	private float right;
	private float top;
	private float bottom;
	
	public Quad(float left, float right, float top, float bottom) {
		this.left = left;
		this.right = right;
		this.top = top;
		this.bottom = bottom;
	}
	
	/**
	 * Возвращает <code>true</code>, переданная в параметре метода окружность хотя бы частично лежит в данном квадрате. 
	 * В противном случае возвращает <code>false</code> 
	 */
	boolean in(Circle circle) {
		if (circle.get_x() >= left && circle.get_x() <= right && circle.get_y() >= bottom && circle.get_y() <= top)
			return true;
		if (Point.distance(left, bottom, circle.get_x(), circle.get_y()) <= circle.get_r())
			return true;
		if (Point.distance(left, top, circle.get_x(), circle.get_y()) <= circle.get_r())
			return true;
		if (Point.distance(right, top, circle.get_x(), circle.get_y()) <= circle.get_r())
			return true;
		if (Point.distance(right, bottom, circle.get_x(), circle.get_y()) <= circle.get_r())
			return true;
		return false;
	}
	
	float getLeft() {
		return left;
	}
	
	float getRight() {
		return right;
	}
	
	float getTop() {
		return top;
	}
	
	float getBottom() {
		return bottom;
	}
}
